// 题目: 出栈序列的合法性.png
#include <stdio.h>

int main()
{
    int m, n, k;
    scanf("%d%d%d", &m, &n, &k);
    int i, j, l;
    int arr[1000] = {0};
    for (i = 0; i < k; i++)
    {
        int flag = 0; // temp1后面有多少个比它小且降序出现的数
        for (j = 0; j < n; j++)
        {
            scanf("%d", &arr[j]);
        }
        int flag2 = 0; // 结束了没
        for (j = 0; j < n - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                flag = 1;
                for (l = j + 1; l < n; l++)
                {
                    if (arr[l] < arr[l - 1] && arr[l] < arr[j])
                    {
                        flag++;
                    }
                    else if (arr[l] > arr[l - 1] && arr[l] < arr[j])
                    {
                        flag2 = 1;
                        break;
                    }
                    else
                    {
                        break;
                    }
                }
                if (flag2 == 1 || flag > m)
                {
                    printf("NO\n");
                    break;
                }
                else if (l == n)
                {
                    printf("YES\n");
                    break;
                }
            }
        }
        if (j == n - 1)
            printf("YES\n");
    }
    return 0;
}
